package com.flejay.dreamrecruiter.model;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

/**
 * Représente un mot clef pour lequel on veut associer un bloc de donnees du CV
 * 
 * @author Victor Fleurant
 *
 */
public final class Tag extends AbstractTag implements Cloneable{

	private Tag(){
		super();
	}
	
	public static Tag getNewInstance(){
		Tag tag = new Tag();
		tag.setExtract(true);
		tag.setLabel("");
		tag.setRegexp(new ArrayList<Pattern>());
		tag.setSubTags(new ArrayList<SubTag>());
		return tag;
	}
	
	// si false alors on ne veut pas extraire de données du CV pour ce mot clef
	private boolean extract;
	
	// sous bloc contenu dans le bloc
	private List<SubTag> subTags;
	
	// liste de regex permettant de savoir si le bloc est terminé ou non
	private List<Pattern> endingPatternList;

	public boolean isExtract() {
		return extract;
	}

	public void setExtract(final boolean extract) {
		this.extract = extract;
	}

	public List<SubTag> getSubTags() {
		return subTags;
	}

	public void setSubTags(final List<SubTag> subTags) {
		this.subTags = subTags;
	}
	
	public List<Pattern> getEndingPatternList() {
		return endingPatternList;
	}

	public void setEndingPatternList(List<Pattern> endingPatternList) {
		this.endingPatternList = endingPatternList;
	}

	@Override
	public Object clone() {
		Tag clonedTag = getNewInstance();
		clonedTag.setExtract(this.isExtract());
		clonedTag.setLabel(this.getLabel());
		clonedTag.setSizeObjective(this.getSizeObjective());
		for (Pattern regex : this.getRegexp()){
			clonedTag.getRegexp().add(regex);
		}
		for (SubTag subTag : this.getSubTags()){
			clonedTag.getSubTags().add((SubTag)subTag.clone());
		}
		return clonedTag;
	}
}
